package com.snack.system.service;

import com.snack.system.domain.TsGoodsType;
import com.snack.system.domain.TsGoodsTypeParam;
import com.snack.system.domain.vo.TreeSelect;

import java.util.List;

/**
 * 商品类型Service接口
 * 
 * @author snack
 * @date 2022-09-18
 */
public interface ITsGoodsTypeService 
{
    /**
     * 查询商品类型
     * 
     * @param goodsTypeId 商品类型主键
     * @return 商品类型
     */
    public TsGoodsType selectTypeById(Long goodsTypeId);

    /**
     * 根据ID查询所有子类型（正常状态）
     *
     * @param goodsTypeId 类型ID
     * @return 子类型数
     */
    public int selectNormalChildrenById(Long goodsTypeId);

    /**
     * 查询商品类型列表
     * 
     * @param goodsType 商品类型
     * @return 商品类型集合
     */
    public List<TsGoodsType> selectList(TsGoodsType goodsType);

    /**
     * 查询所有类型数据
     * @return 商品类型集合
     */
    public List<TsGoodsType> selectAllList();

    /**
     * 构建前端所需要树结构
     *
     * @param goodsTypes 类型列表
     * @return 树结构列表
     */
    public List<TsGoodsType> buildTree(List<TsGoodsType> goodsTypes);

    /**
     * 构建前端所需要下拉树结构
     *
     * @param goodsTypes 类型列表
     * @return 下拉树结构列表
     */
    public List<TreeSelect> buildTreeSelect(List<TsGoodsType> goodsTypes);

    /**
     * 通过主键id 查询属性列表
     * @param goodsTypeId 主键id
     * @return
     */
    public List<TsGoodsTypeParam> getParamList(Long goodsTypeId);

    /**
     * 校验类型名称是否唯一
     *
     * @param goodsType 类型信息
     * @return 结果
     */
    public String checkNameUnique(TsGoodsType goodsType);

    /**
     * 是否存在类型子节点
     *
     * @param goodsTypeId 类型ID
     * @return 结果
     */
    public boolean hasChildById(Long goodsTypeId);

    /**
     * 查询类型是否存在数据
     *
     * @param goodsTypeId 类型ID
     * @return 结果 true 存在 false 不存在
     */
    public boolean checkExistData(Long goodsTypeId);

    /**
     * 新增商品类型
     * 
     * @param goodsType 商品类型
     * @return 结果
     */
    public int insert(TsGoodsType goodsType);

    /**
     * 修改商品类型
     * 
     * @param goodsType 商品类型
     * @return 结果
     */
    public int update(TsGoodsType goodsType);

    /**
     * 删除商品类型信息
     * 
     * @param goodsTypeId 商品类型主键
     * @return 结果
     */
    public int deleteById(Long goodsTypeId);

    /**
     * 删除缓存
     */
    public void removeCache();
}
